package com.deyuanyun.pic.pig.app.support;

import com.deyuanyun.pic.pig.app.domain.PigResults;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.math.BigDecimal;


/**
 * <p>
 * 获得清管效果工具
 * </p>
 * @author tt
 * @date 2016年1月19日 下午3:47:30
 * @version 1.0
 */
public class PigEffectUtil {
	
	/**
	 * 获取清管效果
	 * @param pr
	 * @return
	 * @throws NoSuchFieldException
	 * @throws IllegalAccessException
	 */
	@SuppressWarnings("rawtypes")
	public static PigResults getPiggingEffict(PigResults pr) throws Exception {
		Class c = pr.getClass();
		Field f = c.getDeclaredField("pigginGeffict");
		f.setAccessible(true);
		if(StringUtils.isEmpty(clearLineefficient(pr))){
			f.set(pr, "非良好");
		}else{
			f.set(pr, clearLineefficient(pr).compareTo(BigDecimal.valueOf(0.9)) >= 0  ?"良好":"非良好");
		}
		return pr;
	}
	/**
	 * 得到清管效率
	 * @param pig
	 * @return
	 */
	public static BigDecimal clearLineefficient(PigResults pig){
		BigDecimal actualPassgasVolume=StringUtils.isEmpty(pig.getActualPassGasVolume()) ? BigDecimal.valueOf(0) : pig.getActualPassGasVolume() ;//管道实际通过气量
		BigDecimal gaasRelativedEnsity=StringUtils.isEmpty(pig.getGasRelativedEnsity()) ? BigDecimal.valueOf(0) : pig.getGasRelativedEnsity();//天然气相对密度
		BigDecimal avgTempreture=StringUtils.isEmpty(pig.getAvgTempreture()) ? BigDecimal.valueOf(0) : pig.getAvgTempreture();//天然气平均温度
		BigDecimal pigRunLength=StringUtils.isEmpty(pig.getPigRunLength()) ? BigDecimal.valueOf(0) : pig.getPigRunLength();//清管器运行距离
		BigDecimal compressionCoefficient=StringUtils.isEmpty(pig.getCompressionCoefficient()) ? BigDecimal.valueOf(0) : pig.getCompressionCoefficient();//在平均压力下的压缩系数
		BigDecimal interDiameter=StringUtils.isEmpty(pig.getInterDiameter()) ? BigDecimal.valueOf(0) : pig.getInterDiameter();//管道内径
		BigDecimal sendBallPressure=StringUtils.isEmpty(pig.getSendBallsPressure()) ? BigDecimal.valueOf(0) : pig.getSendBallsPressure();//发球站压力
		BigDecimal backBallsPressure=StringUtils.isEmpty(pig.getBackBallsPressure()) ? BigDecimal.valueOf(0) : pig.getBackBallsPressure();//收球站压力
		
		// t=  天然气相对密度 x 天然气平均温度 x 清管器运行距离 x 在平均压力下的压缩系数 
		BigDecimal t=gaasRelativedEnsity.multiply(avgTempreture).multiply(pigRunLength).multiply(compressionCoefficient);
		
		// t=管道实际通过气量 X t ^(1/2)
		t=actualPassgasVolume.multiply(new BigDecimal(Math.pow(t.doubleValue(), 0.5)));
		
		// t2= 管道内径 ^(8/3) x 5033.12
		double t2=5033.12*Math.pow(interDiameter.doubleValue(),8/3);
		
		// t3= (发球站压力 ^2 -收球站压力^2)^(1/2)
		double t3=Math.pow(sendBallPressure.pow(2).subtract(backBallsPressure.pow(2)).doubleValue(),0.5);
		
		if(0 == t2){
			return null;
		}else{
			return  (t.divide(new BigDecimal(t2)).multiply(new BigDecimal(t3))).setScale(5, BigDecimal.ROUND_HALF_UP);
		}
		
	}
	

	
}
